package com.the_last.controller;

import com.the_last.pojo.po.Product;
import com.the_last.pojo.vo.ProductImportVO;
import com.the_last.service.ProductService;
import com.the_last.utils.ExcelUtil;
import com.the_last.utils.Result;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@RestController
@RequestMapping("/product")
public class ProductController {
    
    @Autowired
    private ProductService productService;
    
    @Autowired
    private ExcelUtil excelUtil;
    
    /**
     * 根据ID获取商品信息
     *
     * @param id 商品ID
     * @return 商品信息
     */
    @GetMapping("/{id}")
    @PreAuthorize("hasAuthority('PRODUCT_QUERY')")
    public Result<Product> getProduct(@PathVariable Integer id) {
        return productService.getProductWithCache(id);
    }
    
    /**
     * 获取商品列表
     *
     * @param filterZeroStock 是否过滤0库存商品，默认为false
     * @return 商品列表
     */
    @GetMapping("/list")
    public Result<List<Product>> getProductList(@RequestParam(required = false, defaultValue = "false") Boolean filterZeroStock) {
        return productService.getProductListWithCache(filterZeroStock);
    }
    
    /**
     * 新增商品
     *
     * @param product 商品信息
     * @return 新增结果
     */
    @PostMapping("/add")
    @PreAuthorize("hasAuthority('PRODUCT_CREATE')")
    public Result<Void> addProduct(@RequestBody Product product) {
        return productService.addProduct(product);
    }
    
    /**
     * 更新商品信息
     *
     * @param product 商品信息
     * @return 更新结果
     */
    @PutMapping("/update")
    @PreAuthorize("hasAuthority('PRODUCT_UPDATE')")
    public Result<Void> updateProduct(@RequestBody Product product) {
        return productService.updateProduct(product);
    }
    
    /**
     * 删除商品
     *
     * @param id 商品ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    @PreAuthorize("hasAuthority('PRODUCT_DELETE')")
    public Result<Void> deleteProduct(@PathVariable Integer id) {
        return productService.deleteProduct(id);
    }
    
    /**
     * Excel批量导入商品
     *
     * @param file Excel文件
     * @return 导入结果
     */
    @PostMapping("/import")
    @PreAuthorize("hasAuthority('PRODUCT_IMPORT')")
    public Result<ProductImportVO> importProducts(@RequestParam("file") MultipartFile file) {
        return productService.importProducts(file);
    }
    
    /**
     * 下载商品导入模板
     *
     * @param response HTTP响应
     */
    @GetMapping("/template")
    @PreAuthorize("hasAuthority('FILE_DOWNLOAD')")
    public void downloadTemplate(HttpServletResponse response) {
        try {
            // 直接提供现有的Excel模板文件
            excelUtil.downloadExcelTemplate("商品导入模板.xlsx", "商品导入模板", response);
        } catch (Exception e) {
            throw new RuntimeException("下载模板失败", e);
        }
    }
    
    /**
     * 导出商品数据到Excel
     *
     * @param response HTTP响应
     */
    @GetMapping("/export")
    @PreAuthorize("hasAuthority('PRODUCT_EXPORT')")
    public void exportProducts(HttpServletResponse response) {
        productService.exportProducts(response);
    }
} 